【MySQL】カラム定義の操作(ALTER TABLE) - カラム定義の追加・変更・削除

【MySQL】カラム定義の操作(ALTER TABLE) - カラム定義の追加・変更・削除

MySQLにおけるカラム定義の操作について解説します。

検証環境

カラム定義の操作

テーブルのカラムは追加・変更・削除が可能です。

これらの操作はALTER TABLE文を使います。

追加

テーブルに新規カラムを追加できます。

基本構文

ALTER TABLE テーブル名 ADD カラム定義

サンプル

mysql> DESC items;
+-------+-------------+------+-----+---------+----------------+
| Field | Type        | Null | Key | Default | Extra          |
+-------+-------------+------+-----+---------+----------------+
| id    | int         | NO   | PRI | NULL    | auto_increment |
| name  | varchar(20) | YES  |     | NULL    |                |
+-------+-------------+------+-----+---------+----------------+
2 rows in set (0.00 sec)

___ih_hl_start
mysql> ALTER TABLE items ADD price INT DEFAULT 0;
___ih_hl_end
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> DESC items;
+-------+-------------+------+-----+---------+----------------+
| Field | Type        | Null | Key | Default | Extra          |
+-------+-------------+------+-----+---------+----------------+
| id    | int         | NO   | PRI | NULL    | auto_increment |
| name  | varchar(20) | YES  |     | NULL    |                |
| price | int         | YES  |     | 0       |                |
+-------+-------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)

10行目でitemsテーブルにpriceカラムを追加しました。

14行目以降のテーブル情報からも正常にカラムが追加できたことが分かります。

変更

カラム定義の変更はカラム名の変更有無によって2パターンあります。

カラム名の変更あり

基本構文

ALTER TABLE テーブル名 CHANGE 現在のカラム名 新しいカラム名 定義

サンプル

mysql> DESC items;
+-------+-------------+------+-----+---------+----------------+
| Field | Type        | Null | Key | Default | Extra          |
+-------+-------------+------+-----+---------+----------------+
| id    | int         | NO   | PRI | NULL    | auto_increment |
| name  | varchar(20) | YES  |     | NULL    |                |
| price | int         | YES  |     | 0       |                |
+-------+-------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)

___ih_hl_start
mysql> ALTER TABLE items CHANGE name name_en VARCHAR(20) NOT NULL;
___ih_hl_end
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> DESC items;
+---------+-------------+------+-----+---------+----------------+
| Field   | Type        | Null | Key | Default | Extra          |
+---------+-------------+------+-----+---------+----------------+
| id      | int         | NO   | PRI | NULL    | auto_increment |
| name_en | varchar(20) | NO   |     | NULL    |                |
| price   | int         | YES  |     | 0       |                |
+---------+-------------+------+-----+---------+----------------+
3 rows in set (0.01 sec)

11行目でitemsテーブルのnameカラムをname_enカラムに変更しました。

15行目以降のテーブル情報からも正常にカラムを変更できたことが分かります。

カラム名の変更なし

基本構文

ALTER TABLE テーブル名 MODIFY カラム名 定義

サンプル

mysql> DESC items;
+-------+-------------+------+-----+---------+----------------+
| Field | Type        | Null | Key | Default | Extra          |
+-------+-------------+------+-----+---------+----------------+
| id    | int         | NO   | PRI | NULL    | auto_increment |
| name  | varchar(20) | YES  |     | NULL    |                |
| price | int         | YES  |     | 0       |                |
+-------+-------------+------+-----+---------+----------------+
3 rows in set (0.01 sec)

___ih_hl_start
mysql> ALTER TABLE items MODIFY name VARCHAR(50) NOT NULL;
___ih_hl_end
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> DESC items;
+-------+-------------+------+-----+---------+----------------+
| Field | Type        | Null | Key | Default | Extra          |
+-------+-------------+------+-----+---------+----------------+
| id    | int         | NO   | PRI | NULL    | auto_increment |
| name  | varchar(50) | NO   |     | NULL    |                |
| price | int         | YES  |     | 0       |                |
+-------+-------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)

11行目でitemsテーブルのnameカラムの定義を変更しました。

15行目以降のテーブル情報からも正常にカラムの定義を変更できたことが分かります。

削除

テーブルからカラムを削除できます。

基本構文

ALTER TABLE テーブル名 DROP カラム名

サンプル

mysql> DESC items;
+-------+-------------+------+-----+---------+----------------+
| Field | Type        | Null | Key | Default | Extra          |
+-------+-------------+------+-----+---------+----------------+
| id    | int         | NO   | PRI | NULL    | auto_increment |
| name  | varchar(20) | YES  |     | NULL    |                |
| price | int         | YES  |     | 0       |                |
+-------+-------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)

___ih_hl_start
mysql> ALTER TABLE items DROP price;
___ih_hl_end
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> DESC items;
+-------+-------------+------+-----+---------+----------------+
| Field | Type        | Null | Key | Default | Extra          |
+-------+-------------+------+-----+---------+----------------+
| id    | int         | NO   | PRI | NULL    | auto_increment |
| name  | varchar(20) | YES  |     | NULL    |                |
+-------+-------------+------+-----+---------+----------------+
2 rows in set (0.00 sec)

11行目でitemsテーブルのpriceカラムを削除しました。

15行目以降のテーブル情報からも正常にカラムを削除できたことが分かります。